#include <stdio.h>
#include <stdlib.h>

typedef struct Student Student;

struct Student {
    int age;
    char name[128];
};

int main() {
    // 打开模式
    // r  以只读的方式打开文件 (不创建文件, 若文件不存在就报错)
    // w  以只写的方式打开文件 (文件不存在就创建文件, 如果文件存在就清空文件内容)
    // b  以二进制的文本类型读或写文件
    // r+ 以可读、可写的方式打开文件 (不创建新文件)
    // w+ 以可读、可写的方式打开文件 (文件不存在就创建文件, 如果文件存在就清空文件内容)
    // a+ 以文本添加的方式打开文件 (打开文件并在末尾追加文件, 若文件不存在就创建文件)
    FILE *wfp_01 = fopen("./a.txt", "a+");

    Student student_list_01[10] = {{19, "Blue"},
                                   {20, "Yui"},
                                   {23, "Bai"}};

    // size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    // 功能: 以数据块的方式给文件写入内容
    // ptr: 准备写入文件数据到地址
    // size: 写入文件内容的数据块大小
    // nmemb: 数据块的数量
    // stream: 需要写入数据的文件的指针
    // 返回值: 数据块的数量(与传入的 nmemb 值一样)
    // size 与 nmemb 的乘积是写入数据的总字节数(就是写入数据的大小)
    int count = fwrite(student_list_01, sizeof(Student), 10, wfp_01);
    printf("count = %d\n", count);

    Student student_list_02[10];
    FILE *rfp_01 = fopen("./a.txt", "r");
    fread(student_list_02, sizeof(Student), 10, rfp_01);

    for (int i = 0; i < 10; ++i) {
        printf("%s is %d year old\n", student_list_02[i].name, student_list_02[i].age);
    }
    printf("\n");

    // 打开的文件资源在使用完成之后就要关闭
    fclose(wfp_01);
    fclose(rfp_01);

    return 0;
}